package com.example.jk.service.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.example.jk.common.Result;
import com.example.jk.entity.User;
import com.example.jk.entity.UserJk;
import com.example.jk.mapper.UserJkMapper;
import com.example.jk.service.UserJkService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author cjx
 * @since 2021-04-04
 */
@Service
public class UserJkServiceImpl extends ServiceImpl<UserJkMapper, UserJk> implements UserJkService {
    @Resource
    UserJkMapper jkMapper;
    @Override
    public Result add(UserJk userJk) {
        userJk.setTzl(userJk.getTz()/(userJk.getSg()*2/100));
        userJk.setCreatetime(LocalDateTime.now());
        if(!userJk.insert()){
            return Result.error();
        }
        return Result.success();
    }

    @Override
    public Result getlist(UserJk userJk) {
        return Result.success(jkMapper.getList(userJk));
    }

    @Override
    public Result getNorm(UserJk userJk) {
        String res = "";
        UserJk jk =null;
        if(userJk.getId() == null){
            jk  = jkMapper.getMaxTime(userJk);
        }else{
            jk =  userJk.selectById();
        }
        res = "您的体重："+jk.getTz()+"kg";
        Float tzl = jk.getTzl()*100;
        DecimalFormat decimalFormat = new DecimalFormat("0.00");
        String StrTzl =decimalFormat.format(tzl)+"%";
        if("女".equals(userJk.getSex())){
            if(0.05f<=tzl && tzl<=0.2f){
                res += "(偏瘦)";
            }
            if(0.21f<=tzl && tzl<=0.34f){
                res += "(正常)";
            }
            if(0.35f<=tzl && tzl<=0.39f){
                res += "(超重)";
            }
            if(0.40<=tzl && tzl<=0.45f){
                res += "(肥胖)";
            }
            res +="，您的体脂率为:"+StrTzl+" 标准体脂率为21%-34%，您的视力为："+jk.getSl()+" 标准视力为5.0，您的身高为："+jk.getSg()+"m 中国"+userJk.getSex()+"性平均身高为:158cm";
        }else{
            if(0.05f<=tzl && tzl<=0.1f){
                res += "(偏瘦)";
            }
            if(0.11f<=tzl && tzl<=0.21f){
                res += "(正常)";
            }
            if(0.22f<=tzl && tzl<=0.26f){
                res += "(超重)";
            }
            if(0.27<=tzl && tzl<=0.45f){
                res += "(肥胖)";
            }
            res +="，您的体脂率为:"+StrTzl+" 标准体脂率为21%-34%，您的视力为："+jk.getSl()+" 标准视力为5.0，您的身高为："+jk.getSg()+"m 中国"+userJk.getSex()+"性平均身高为:169cm";
        }
        return Result.success(res);
    }

    @Override
    public Result getBlood(UserJk userJk) {
        int age = userJk.getAge();
        List<Float> g=new ArrayList<>();
        List<Float> d=new ArrayList<>();
        List<Float> z=new ArrayList<>();
        UserJk jk =null;
        if(userJk.getId() == null){
            jk  = jkMapper.getMaxTime(userJk);
        }else{
            jk =  userJk.selectById();
        }
        z.add(jk.getXya());
        z.add(jk.getXt());
        z.add(jk.getDgc());
        z.add(jk.getSgy());
        if("女".equals(userJk.getSex())){
            if(16<age && age<20){
                g.add(110f);
                d.add(70f);
            }
            if(21<age&&age<25){
                g.add(110f);
                d.add(71f);
            }
            if(26<age&&age<30){
                g.add(112f);
                d.add(73f);
            }
            if(31<age&&age<35){
                g.add(114f);
                d.add(74f);
            }
            if(36<age&&age<40){
                g.add(116f);
                d.add(77f);
            }
            if(41<age&&age<45){
                g.add(122f);
                d.add(78f);
            }
            if(46<age&&age<50){
                g.add(128f);
                d.add(79f);
            }
            if(51<age&&age<55){
                g.add(134f);
                d.add(80f);
            }
            if(56<age&&age<60){
                g.add(139f);
                d.add(82f);
            }
            if(61<age&&age<65){
                g.add(145f);
                d.add(83f);
            }
        }else{
            if(16<age && age<20){
                g.add(115f);
                d.add(73f);
            }
            if(21<age&&age<25){
                g.add(115f);
                d.add(73f);
            }
            if(26<age&&age<30){
                g.add(115f);
                d.add(75f);
            }
            if(31<age&&age<35){
                g.add(117f);
                d.add(76f);
            }
            if(36<age&&age<40){
                g.add(120f);
                d.add(80f);
            }
            if(41<age&&age<45){
                g.add(124f);
                d.add(81f);
            }
            if(46<age&&age<50){
                g.add(128f);
                d.add(82f);
            }
            if(51<age&&age<55){
                g.add(134f);
                d.add(84f);
            }
            if(56<age&&age<60){
                g.add(137f);
                d.add(84f);
            }
            if(61<age&&age<65){
                g.add(148f);
                d.add(86f);
            }

        }
        //空腹血糖
        g.add(6.1f);
        d.add(3.9f);
        //胆固醇
        g.add(5.17f);
        d.add(2.8f);
        //三甘油
        g.add(1.7f);
        d.add(0.56f);
        if("女".equals(userJk.getSex())){
            //高密度蛋白质
            g.add(1.55f);
            d.add(0.9f);
        }else{
            g.add(1.15f);
            d.add(0.96f);
        }
        g.add(3.1f);
        d.add(0f);
        Map<String,Object> map = new HashMap<>();
        map.put("g",g);
        map.put("d",d);
        map.put("z",z);
        return Result.success(map);
    }

    @Override
    public Result detail(UserJk userJk) {
        return Result.success(userJk.selectById());
    }

    @Override
    public Result getDayList(UserJk userJk) {
/*        String startDay = LocalDate.now().plusDays(userJk.getDayNum()*-1).toString();
        String endDay = LocalDate.now().toString();
        List<Map<String,Object>> list = jkMapper.getDayList(userJk,startDay,endDay);
        Map<String,Object> map = new HashMap<>();
        for (Map<String,Object> mapList: list) {
            List<Object> floatList= new ArrayList<>();
            list.add(0, (Map<String, Object>) mapList.get("sg"));
            list.add(1, (Map<String, Object>) mapList.get("tz"));
            list.add(2, (Map<String, Object>) mapList.get("wd"));
            list.add(3, (Map<String, Object>) mapList.get("sl"));
            list.add(4, (Map<String, Object>) mapList.get("xya"));
            list.add(5, (Map<String, Object>) mapList.get("xt"));
            list.add(6, (Map<String, Object>) mapList.get("dgc"));
            list.add(7, (Map<String, Object>) mapList.get("sgy"));
            list.add(8, (Map<String, Object>) mapList.get("gdbz"));
            list.add(9, (Map<String, Object>) mapList.get("ddbz"));
            map.put(mapList.get("day").toString(),floatList);
        }*/
        List<Map<String,Object>> list = jkMapper.getDayList(userJk);
        return Result.success(list);
    }

    @Override
    public Result update(UserJk userJk) {
        if(!userJk.updateById()){
            Result.error();
        }
        return Result.success();
    }

}
